<?php

namespace org;

// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// |         lanfengye <zibin_5257@163.com>
// +----------------------------------------------------------------------

class Page {

        // 分页栏每页显示的页数
        public $rollPage = 5;
        // 页数跳转时要带的参数
        public $parameter;
        // 分页URL地址
        public $url = '';
        // 默认列表每页显示行数
        public $listRows = 20;
        // 起始行数
        public $firstRow;
        // 分页总页面数
        protected $totalPages;
        // 总行数
        protected $totalRows;
        // 当前页数
        protected $nowPage;
        // 分页的栏的总页数
        protected $coolPages;
        // 分页显示定制
        protected $config = array('first' => '第一页', 'prev' => '上一页', 'next' => '下一页', 'last' => '最后一页', 'theme' => '%first% %prePage% %upPage%  %linkPage% %downPage%    %nextPage% %end%');
        // 默认分页变量名
        protected $varPage;
        //分隔符
        protected $depr;
        //后缀
        protected $suffix;

        /**
         * 架构函数
         * @access public
         * @param array $totalRows  总的记录数
         * @param array $listRows  每页显示记录数
         * @param array $parameter  分页跳转的参数
         */
        public function __construct($totalRows, $listRows = '', $parameter = '', $url = '', $depr = '', $suffix = '') {
                $this->totalRows = $totalRows;
                $this->parameter = $parameter;
                $this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p';
                $this->url = $url;
                $this->depr = $depr;
                $this->suffix = $suffix;
                if (!empty($listRows)) {
                        $this->listRows = intval($listRows);
                }
                $this->totalPages = ceil($this->totalRows / $this->listRows);     //总页数
                $this->coolPages = ceil($this->totalPages / $this->rollPage);
                $this->nowPage = !empty($_REQUEST[$this->varPage]) ? intval($_REQUEST[$this->varPage]) : 1;
                if ($this->nowPage < 1) {
                        $this->nowPage = 1;
                } elseif (!empty($this->totalPages) && $this->nowPage > $this->totalPages) {
                        $this->nowPage = $this->totalPages;
                }
                $this->firstRow = $this->listRows * ($this->nowPage - 1);
        }

        public function setConfig($name, $value) {
                if (isset($this->config[$name])) {
                        $this->config[$name] = $value;
                }
        }

        /**
         * 分页显示输出
         * @access public
         */
        public function show() {
                if (0 == $this->totalRows)
                        return '';
                $p = $this->varPage;
                $nowCoolPage = ceil($this->nowPage / $this->rollPage);

                // 分析分页参数
                if ($this->url) {
                        if ($this->depr) {
                                $depr = $this->depr;
                        } else {
                                $depr = C('URL_PATHINFO_DEPR');
                        }
                        $url = rtrim(U('/' . $this->url, '', false), $depr) . $depr . '__PAGE__';
                        if ($this->suffix)
                                $url .= "." . $this->suffix;
                } else {
                        if ($this->parameter && is_string($this->parameter)) {
                                parse_str($this->parameter, $parameter);
                        } elseif (is_array($this->parameter)) {
                                $parameter = $this->parameter;
                        } elseif (empty($this->parameter)) {
                                unset($_GET[C('VAR_URL_PARAMS')]);
                                $var = !empty($_POST) ? $_POST : $_GET;
                                if (empty($var)) {
                                        $parameter = array();
                                } else {
                                        $parameter = $var;
                                }
                        }
                        $parameter[$p] = '__PAGE__';
                        $url = U('', $parameter);
                }
                //上下翻页字符串
                $upRow = $this->nowPage - 1;
                $downRow = $this->nowPage + 1;
                if ($upRow > 0) {
                        $upPage = "&nbsp;<a class='pre' href='" . str_replace('__PAGE__', $upRow, $url) . "'>" . $this->config['prev'] . "</a>";
                } else {
                        $upPage = "";
                }

                if ($downRow <= $this->totalPages) {
                        $downPage = "<a class='next' href='" . str_replace('__PAGE__', $downRow, $url) . "'>" . $this->config['next'] . "</a>";
                } else {
                        $downPage = "";
                }
                // << < > >>
                if ($nowCoolPage == 1) {
                        $theFirst = '';
                        $prePage = '';
                }
                if ($nowCoolPage == $this->coolPages) {
                        $nextPage = '';
                        $theEnd = '';
                }
                // 1 2 3 4 5
                $linkPage = "";
                for ($i = 1; $i <= $this->rollPage; $i++) {
                        $page = ($nowCoolPage - 1) * $this->rollPage + $i;
                        if ($page != $this->nowPage) {
                                if ($page <= $this->totalPages) {
                                        $linkPage .= "&nbsp;<a href='" . str_replace('__PAGE__', $page, $url) . "'>" . $page . "</a>";
                                } else {
                                        break;
                                }
                        } else {
                                if ($this->totalPages != 1) {
                                        $linkPage .= "&nbsp;<span class='current'>" . $page . "</span>";
                                }
                        }
                }

                $pageStr = str_replace(
                        array('%nowPage%', '%totalRow%', '%totalPage%', '%upPage%', '%downPage%', '%first%', '%prePage%', '%linkPage%', '%nextPage%', '%end%'), array($this->nowPage, $this->totalRows, $this->totalPages, $upPage, $downPage, $linkPage), $this->config['theme']);
                return $pageStr;
        }

        public function show2() {
                if (0 == $this->totalRows)
                        return '';
                $p = $this->varPage;

                // 分析分页参数
                if ($this->url) {
                        if ($this->depr) {
                                $depr = $this->depr;
                        } else {
                                $depr = C('URL_PATHINFO_DEPR');
                        }
                        $url = rtrim(U('/' . $this->url, '', false), $depr) . $depr . '__PAGE__';
                        if ($this->suffix)
                                $url .= "." . $this->suffix;
                } else {
                        if ($this->parameter && is_string($this->parameter)) {
                                parse_str($this->parameter, $parameter);
                        } elseif (is_array($this->parameter)) {
                                $parameter = $this->parameter;
                        } elseif (empty($this->parameter)) {
                                unset($_GET[C('VAR_URL_PARAMS')]);
                                $var = !empty($_POST) ? $_POST : $_GET;
                                if (empty($var)) {
                                        $parameter = array();
                                } else {
                                        $parameter = $var;
                                }
                        }
                        $parameter[$p] = '__PAGE__';
                        $url = U('', $parameter);
                }
                //上下翻页字符串
                $upRow = $this->nowPage - 1;
                $downRow = $this->nowPage + 1;
                if ($upRow > 0) {
                        $upPage = "&nbsp;<a  data-role='button' data-inline='true' data-icon='arrow-l' class='left' data-iconpos='left' href='" . str_replace('__PAGE__', $upRow, $url) . "'>" . $this->config['prev'] . "</a>";
                } else {
                        $upPage = "";
                }

                if ($downRow <= $this->totalPages) {
                        $downPage = "<a data-role='button' data-inline='true' data-icon='arrow-r' class='right' data-iconpos='right'  href='" . str_replace('__PAGE__', $downRow, $url) . "'>" . $this->config['next'] . "</a>";
                } else {
                        $downPage = "";
                }

                $pageStr = str_replace(
                        array('%nowPage%', '%totalRow%', '%totalPage%', '%upPage%', '%downPage%', '%first%', '%prePage%', '%linkPage%', '%nextPage%', '%end%'), array($this->nowPage, $this->totalRows, $this->totalPages, $upPage, $downPage), $this->config['theme']);
                return $pageStr;
        }

}
